import { createRouter, createWebHashHistory } from 'vue-router'
import Layout from '../layout/index.vue'

// 定义路由记录类型
interface RouteModule {
  default: {
    __name?: string
    meta?: {
      title?: string
      icon?: string
    }
  }
}

// 扫描 views 目录下所有一级文件夹的 index.vue
const modules = import.meta.glob('../views/*/index.vue', { eager: true }) as Record<string, RouteModule>

// 根据文件路径和组件meta信息生成子路由
const children = Object.entries(modules).map(([filePath, module]) => {
  // filePath 形如 ../views/xxx/index.vue
  const name = filePath.split('/')[2] // 取文件夹名
  // 优先使用组件中定义的meta信息，如果没有则使用默认值
  const componentMeta = module.default.meta || {}
  return {
    path: name.toLowerCase(), // 路由 path 用文件夹小写
    name: name,
    component: module.default, // 使用加载的组件
    meta: {
      title: componentMeta.title || name, // 优先使用组件中的title
      icon: componentMeta.icon || 'Menu' // 优先使用组件中的icon
    }
  }
})

const routes = [
  {
    path: '/',
    component: Layout,
    redirect: '/home',
    children
  },
  {
    path: '/login',
    name: 'Login',
    component: () => import('../components/login.vue')
  },
  { path: '/:pathMatch(.*)*', redirect: '/' }
]

const router = createRouter({
  history: createWebHashHistory(),
  routes
})

router.beforeEach((to, _, next) => {
  if (to.name !== 'Login') {
    // const token = localStorage.getItem('token')
    // if (!token) return next('/login')
  }
  next()
})

export default router
